The present invention relates to allocating memory, and more specifically, this invention relates to verification of extended address volume (EAV) allocation.
Preventing wasted storage space is an important part of many storage systems. For example, enterprise-level storage systems often store large numbers of data sets. Small amounts of wasted space associated with each data set can add up to be a large amount of wasted space in the system.
One environment in which this may occur is IBM's z/OS environment. Certain versions of z/OS, and related products, provide extended address volumes (EAVs) with two types of storage space: track-managed storage and cylinder-managed storage. Track-managed storage is the storage on the EAV that is managed in tracks and cylinders, with each data set stored therein occupying an integral multiple of tracks. Cylinder-managed storage is managed in multi-cylinder units, and each data set stored therein occupies an integral multiple of multi-cylinder units. Requests targeted for the cylinder-managed storage are rounded up to the next multi-cylinder unit. Each cylinder includes 15 tracks, typically.
This system, while providing a number of advantages, may use space inefficiently. This may happen more often in cases where the same allocation is used by default by job control language (JCL) or a user's program or application. For example, a user may allocate a data set as part of an operation for storing data. However, the quantity of data to be stored may be unknown. Many of these programs code a release parameter (e.g., RLSE), and expect unused spaced to be removed from the file and released for use for other storage needs. The user may initiate a request to store the incoming data and specify a size, such as 100 cylinders, with an additional 100 cylinders to be used for overflow. The request may also include a release parameter that indicates that any unused space is to be released. A problem arises in that if the user has allocated the data set in a cylinder managed storage region on an EAV device, the space cannot be released to less than 21 cylinders.
Therefore, if a standard job is specified for allocating files of random sizes, and that standard job specifies a size for storage, for example SPACE=(CYL, (100, 100), RLSE), 100 cylinders will be allocated in cylinder managed storage for any job to be allocated. If only one track is used in that data set by a job, only the space down to 21 cylinders may be released. Before cylinder managed storage, the release parameter would reduce the allocated space down to 1 track, the amount that is actually being used. The difference between these amounts is 21 cylinders multiplied by 15 tracks per cylinder, minus the 1 used track, which results in 314 tracks that are wasted and cannot be used by other data sets.